ํ๋ก ํธ์๋ ์ถ์ฒ ๊ฒฉ๋ฆฌ ์ ์ฑ ์ ๋ํ ์ฌ์ธต ๋ถ์. ์๋ ๋ฐฉ์, ์ด์ , ๊ตฌํ ๋ฐฉ๋ฒ ๋ฐ ํ๋ ์น ๋ณด์์ ๋ฏธ์น๋ ์ํฅ์ ์์๋ณด๊ณ ์ฌ์ฉ์์ ๋ฐ์ดํฐ๋ฅผ ๋ณดํธํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ฐ์ธ์.
ํ๋ก ํธ์๋ ์ถ์ฒ ๊ฒฉ๋ฆฌ ์ ์ฑ : ํ๋ ์น ๋ณด์ ๊ฐํ
์ค๋๋ ์ ์ ๋ ๋ณต์กํด์ง๋ ์น ํ๊ฒฝ์์ ๋ณด์ ์ํ์ ๋๋ผ์ด ์๋๋ก ์งํํ๊ณ ์์ต๋๋ค. ์ ํต์ ์ธ ๋ณด์ ์กฐ์น๋ ์ ๊ตํ ๊ณต๊ฒฉ์ผ๋ก๋ถํฐ ๋ณดํธํ๊ธฐ์ ์ข ์ข ๋ถ์ถฉ๋ถํฉ๋๋ค. ํ๋ก ํธ์๋ ์ถ์ฒ ๊ฒฉ๋ฆฌ ์ ์ฑ ์ ์๋ก ๋ค๋ฅธ ์ถ์ฒ ์ฌ์ด์ ๊ฐ๋ ฅํ ๋ณด์ ๊ฒฝ๊ณ๋ฅผ ์์ฑํ์ฌ ์น ์ ํ๋ฆฌ์ผ์ด์ ๋ณด์์ ๊ฐํํ๋ ๊ฐ๋ ฅํ ๋๊ตฌ๋ก ๋ถ์ํ๊ณ ์์ต๋๋ค. ์ด ์ข ํฉ ๊ฐ์ด๋์์๋ ์ถ์ฒ ๊ฒฉ๋ฆฌ์ ๋ณต์ก์ฑ, ๊ธฐ๋ณธ ๋ฉ์ปค๋์ฆ, ๊ตฌํ ์ ๋ต, ๊ทธ๋ฆฌ๊ณ ์ฌ์ฉ์ ๋ฐ์ดํฐ ๋ณดํธ ๋ฐ ๋ณด์ ์ทจ์ฝ์ ์ํ์ ๋ฏธ์น๋ ์ฌ๋ํ ์ํฅ์ ๋ํด ์์ธํ ์์๋ณผ ๊ฒ์ ๋๋ค.
์ถ์ฒ ๊ฒฉ๋ฆฌ์ ํ์์ฑ ์ดํด
์น ๋ณด์์ ๊ธฐ์ด๋ ๋์ผ ์ถ์ฒ ์ ์ฑ (Same-Origin Policy, SOP)์ ์์ต๋๋ค. ์ด๋ ์น ํ์ด์ง๊ฐ ๋ค๋ฅธ ์ถ์ฒ์ ๋ฆฌ์์ค์ ์ ๊ทผํ๋ ๊ฒ์ ์ ํํ๋ ์ค์ํ ๋ฉ์ปค๋์ฆ์ ๋๋ค. ์ถ์ฒ๋ ์คํด(ํ๋กํ ์ฝ), ํธ์คํธ(๋๋ฉ์ธ), ํฌํธ๋ก ์ ์๋ฉ๋๋ค. SOP๊ฐ ๊ธฐ๋ณธ์ ์ธ ์์ค์ ๋ณดํธ๋ฅผ ์ ๊ณตํ์ง๋ง, ์๋ฒฝํ์ง๋ ์์ต๋๋ค. ํน์ ๊ต์ฐจ ์ถ์ฒ ์ํธ์์ฉ์ ํ์ฉ๋๋ฉฐ, ์ด๋ ์ข ์ข ์ ์์ ์ธ ํ์์๊ฐ ์ ์ฉํ ์ ์๋ ์ทจ์ฝ์ ์ผ๋ก ์ด์ด์ง๋๋ค. ๋์ฑ์ด ์คํํฐ(Spectre) ๋ฐ ๋ฉํธ๋ค์ด(Meltdown)๊ณผ ๊ฐ์ ๊ณผ๊ฑฐ CPU ์ํคํ ์ฒ์ ์ทจ์ฝ์ ์ ๋์ผ ์ถ์ฒ ๋ด์์๋ ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ์ ์ถํ ์ ์๋ ์ฌ์ด๋ ์ฑ๋ ๊ณต๊ฒฉ์ ๊ฐ๋ฅ์ฑ์ ๋ถ๊ฐ์์ผฐ์ต๋๋ค. ์ถ์ฒ ๊ฒฉ๋ฆฌ๋ ๋ ์๊ฒฉํ ๋ณด์ ๊ฒฝ๊ณ๋ฅผ ๋ง๋ค์ด ์ด๋ฌํ ํ๊ณ๋ฅผ ํด๊ฒฐํฉ๋๋ค.
์ถ์ฒ ๊ฒฉ๋ฆฌ๋ ๋ฌด์์ธ๊ฐ?
์ถ์ฒ ๊ฒฉ๋ฆฌ๋ ๋ธ๋ผ์ฐ์ ํ๋ก์ธ์ค์์ ์น์ฌ์ดํธ์ ์ถ์ฒ๋ฅผ ๋ค๋ฅธ ์ถ์ฒ๋ก๋ถํฐ ๊ฒฉ๋ฆฌํ๋ ๋ณด์ ๊ธฐ๋ฅ์ ๋๋ค. ์ด ๊ฒฉ๋ฆฌ๋ ์ฌ์ดํธ๊ฐ ์คํํฐ ๋ฐ ๋ฉํธ๋ค์ด๊ณผ ๊ฐ์ ํน์ ์ ํ์ ๊ต์ฐจ ์ฌ์ดํธ ๊ณต๊ฒฉ๋ฟ๋ง ์๋๋ผ, ๋ฐ์ดํฐ ์ ์ถ๋ก ์ด์ด์ง ์ ์๋ ๋ณด๋ค ์ ํต์ ์ธ ๊ต์ฐจ ์ฌ์ดํธ ์คํฌ๋ฆฝํ (XSS) ์ทจ์ฝ์ ์ผ๋ก๋ถํฐ ์์ ํ๊ฒ ๋ณดํธํฉ๋๋ค. ์ถ์ฒ ๊ฒฉ๋ฆฌ๋ฅผ ๋ฐฐํฌํจ์ผ๋ก์จ, ๋น์ ์ ๋ณธ์ง์ ์ผ๋ก ๋น์ ์ ์ถ์ฒ๋ฅผ ์ํ ์ ์ฉ ํ๋ก์ธ์ค ๋๋ ์ ์ฉ ํ๋ก์ธ์ค ์งํฉ์ ์์ฑํ์ฌ ๊ณต์ ๋ฆฌ์์ค์ ์ ์ฌ์ ์ํ์ ์ ํํ๊ณ ์ ๋ณด ์ ์ถ์ ์ํ์ ์ํํฉ๋๋ค.
์ถ์ฒ ๊ฒฉ๋ฆฌ์ ์ฃผ์ ๊ตฌ์ฑ ์์
์ถ์ฒ ๊ฒฉ๋ฆฌ๋ ์ธ ๊ฐ์ง ์ฃผ์ HTTP ํค๋์ ์ํธ ์์ฉ์ ํตํด ๋ฌ์ฑ๋ฉ๋๋ค:
- ๊ต์ฐจ ์ถ์ฒ ์คํ๋ ์ ์ฑ
(Cross-Origin-Opener-Policy, COOP): ์ด ํค๋๋ ๋ค๋ฅธ ์ถ์ฒ๊ฐ ๋น์ ์ ์น์ฌ์ดํธ๋ฅผ ํ์
์ผ๋ก ์ด๊ฑฐ๋
<iframe>์ ์ฝ์ ํ๋ ๊ฒ์ ์ ์ดํฉ๋๋ค. COOP๋ฅผsame-origin,same-origin-allow-popups๋๋no-unsafe-none์ผ๋ก ์ค์ ํ๋ฉด ๋ค๋ฅธ ์ถ์ฒ๊ฐ ๋น์ ์ window ๊ฐ์ฒด์ ์ง์ ์ ๊ทผํ๋ ๊ฒ์ ๋ง์ ๋ธ๋ผ์ฐ์ง ์ปจํ ์คํธ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๊ฒฉ๋ฆฌํฉ๋๋ค. - ๊ต์ฐจ ์ถ์ฒ ์๋ฒ ๋ ์ ์ฑ
(Cross-Origin-Embedder-Policy, COEP): ์ด ํค๋๋ ๋น์ ์ ์ถ์ฒ์์ ๋ก๋๋๋๋ก ๋ช
์์ ์ผ๋ก ๋์ํ์ง ์์ ๋ชจ๋ ๊ต์ฐจ ์ถ์ฒ ๋ฆฌ์์ค์ ๋ก๋ฉ์ ์ฐจ๋จํ๋๋ก ๋ธ๋ผ์ฐ์ ์ ์ง์ํฉ๋๋ค. ๋ฆฌ์์ค๋
๊ต์ฐจ ์ถ์ฒ ๋ฆฌ์์ค ์ ์ฑ (Cross-Origin-Resource-Policy, CORP)ํค๋ ๋๋ CORS(Cross-Origin Resource Sharing) ํค๋์ ํจ๊ป ์ ๊ณต๋์ด์ผ ํฉ๋๋ค. - ๊ต์ฐจ ์ถ์ฒ ๋ฆฌ์์ค ์ ์ฑ (Cross-Origin-Resource-Policy, CORP): ์ด ํค๋๋ฅผ ์ฌ์ฉํ๋ฉด ํน์ ๋ฆฌ์์ค๋ฅผ ๋ก๋ํ ์ ์๋ ์ถ์ฒ๋ฅผ ์ ์ธํ ์ ์์ต๋๋ค. ์ด๋ ํ๊ฐ๋์ง ์์ ์ถ์ฒ๋ก๋ถํฐ ๋น์ ์ ๋ฆฌ์์ค๊ฐ ๋ก๋๋๋ ๊ฒ์ ๋ณดํธํ๋ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํฉ๋๋ค.
๊ต์ฐจ ์ถ์ฒ ์คํ๋ ์ ์ฑ (COOP) ์์ธ ์ ๋ณด
COOP ํค๋๋ window ๊ฐ์ฒด์ ๋ํ ๊ต์ฐจ ์ถ์ฒ ์ ๊ทผ์ ๋ฐฉ์งํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค. ์ฃผ์ ๊ฐ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
same-origin: ๊ฐ์ฅ ์ ํ์ ์ธ ์ต์ ์ ๋๋ค. ๋ธ๋ผ์ฐ์ง ์ปจํ ์คํธ๋ฅผ ๋์ผํ ์ถ์ฒ์ ๋ฌธ์๋ก ๊ฒฉ๋ฆฌํฉ๋๋ค. ๋ค๋ฅธ ์ถ์ฒ์ ๋ฌธ์๋ ์ด ์ฐฝ์ ์ง์ ์ ๊ทผํ ์ ์์ผ๋ฉฐ, ๊ทธ ๋ฐ๋๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค.same-origin-allow-popups: ์ด ์ต์ ์ ํ์ฌ ๋ฌธ์์ ์ํด ์ด๋ฆฐ ํ์ ์ด ์คํ๋ ์ฐฝ์COOP: same-origin์ด ์ค์ ๋์ด ์๋๋ผ๋ ์คํ๋ ์ฐฝ์ ๋ํ ์ ๊ทผ์ ์ ์งํ๋๋ก ํ์ฉํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ค๋ฅธ ์ถ์ฒ๋ ์ฌ์ ํ ์ฐฝ์ ์ ๊ทผํ ์ ์์ต๋๋ค.unsafe-none: ํค๋๊ฐ ์ง์ ๋์ง ์์ ๊ฒฝ์ฐ์ ๊ธฐ๋ณธ ๋์์ ๋๋ค. ์ฐฝ์ ๋ํ ๊ต์ฐจ ์ถ์ฒ ์ ๊ทผ์ ํ์ฉํ๋ฉฐ, ๊ฐ์ฅ ์์ ํ์ง ์์ ์ต์ ์ ๋๋ค.
์์:
Cross-Origin-Opener-Policy: same-origin
๊ต์ฐจ ์ถ์ฒ ์๋ฒ ๋ ์ ์ฑ (COEP) ์์ธ ์ ๋ณด
COEP ํค๋๋ ์คํํฐ ์คํ์ผ์ ๊ณต๊ฒฉ์ ์ํํ๊ธฐ ์ํด ์ค๊ณ๋์์ต๋๋ค. ์ด ํค๋๋ ์น์ฌ์ดํธ์ ์ํด ๋ก๋๋๋ ๋ชจ๋ ๊ต์ฐจ ์ถ์ฒ ๋ฆฌ์์ค๊ฐ ๋น์ ์ ์ถ์ฒ์์ ๋ก๋๋๋ ๊ฒ์ ๋ช
์์ ์ผ๋ก ๋์ํ ๊ฒ์ ์๊ตฌํฉ๋๋ค. ์ด๋ Cross-Origin-Resource-Policy ํค๋๋ฅผ ์ค์ ํ๊ฑฐ๋ CORS๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌ์ฑ๋ฉ๋๋ค.
์ฃผ์ ๊ฐ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
require-corp: ๊ฐ์ฅ ์ ํ์ ์ธ ์ต์ ์ ๋๋ค. ๋ชจ๋ ๊ต์ฐจ ์ถ์ฒ ๋ฆฌ์์ค๊ฐ ๋น์ ์ ์ถ์ฒ์์ ๋ก๋๋๋๋ก ๋ช ์์ ์ผ๋ก ํ์ฉํ๋ CORP ํค๋์ ํจ๊ป ๋ก๋๋ ๊ฒ์ ์๊ตฌํฉ๋๋ค.credentialless:require-corp์ ์ ์ฌํ์ง๋ง ๊ต์ฐจ ์ถ์ฒ ์์ฒญ๊ณผ ํจ๊ป ์๊ฒฉ ์ฆ๋ช (์ฟ ํค, HTTP ์ธ์ฆ)์ ๋ณด๋ด์ง ์์ต๋๋ค. ์ด๋ ๊ณต๊ฐ ๋ฆฌ์์ค๋ฅผ ๋ก๋ํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค.unsafe-none: ๊ธฐ๋ณธ ๋์์ ๋๋ค. ๊ต์ฐจ ์ถ์ฒ ๋ฆฌ์์ค๊ฐ ์๋ฌด๋ฐ ์ ํ ์์ด ๋ก๋๋๋๋ก ํ์ฉํฉ๋๋ค.
์์:
Cross-Origin-Embedder-Policy: require-corp
๊ต์ฐจ ์ถ์ฒ ๋ฆฌ์์ค ์ ์ฑ (CORP) ์์ธ ์ ๋ณด
CORP ํค๋๋ฅผ ์ฌ์ฉํ๋ฉด ํน์ ๋ฆฌ์์ค๋ฅผ ๋ก๋ํ ์ ์๋ ์ถ์ฒ๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค. ์ด๋ ๊ต์ฐจ ์ถ์ฒ ๋ฆฌ์์ค ์ ๊ทผ์ ๋ํ ์ธ๋ถํ๋ ์ ์ด๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ฃผ์ ๊ฐ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
same-origin: ๋ฆฌ์์ค๋ ๋์ผํ ์ถ์ฒ์ ์์ฒญ์ ์ํด์๋ง ๋ก๋๋ ์ ์์ต๋๋ค.same-site: ๋ฆฌ์์ค๋ ๋์ผํ ์ฌ์ดํธ(๋์ผํ ์คํด ๋ฐ eTLD+1)์ ์์ฒญ์ ์ํด์๋ง ๋ก๋๋ ์ ์์ต๋๋ค.cross-origin: ๋ฆฌ์์ค๋ ๋ชจ๋ ์ถ์ฒ์์ ๋ก๋๋ ์ ์์ต๋๋ค. ์ด ์ต์ ์ ์ฌ์ค์ CORP ๋ณดํธ๋ฅผ ๋นํ์ฑํํ๋ฏ๋ก ์ ์คํ๊ฒ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
์์:
Cross-Origin-Resource-Policy: same-origin
์ถ์ฒ ๊ฒฉ๋ฆฌ ๊ตฌํ: ๋จ๊ณ๋ณ ๊ฐ์ด๋
์ถ์ฒ ๊ฒฉ๋ฆฌ๋ฅผ ๊ตฌํํ๋ ค๋ฉด ์ ์คํ๊ณ ์ฒด๊ณ์ ์ธ ์ ๊ทผ์ด ํ์ํฉ๋๋ค. ๋ค์์ ๋จ๊ณ๋ณ ๊ฐ์ด๋์ ๋๋ค:
- ์์กด์ฑ ๋ถ์: ์ด๋ฏธ์ง, ์คํฌ๋ฆฝํธ, ์คํ์ผ์ํธ, ํฐํธ๋ฅผ ํฌํจํ์ฌ ์น์ฌ์ดํธ๊ฐ ๋ก๋ํ๋ ๋ชจ๋ ๊ต์ฐจ ์ถ์ฒ ๋ฆฌ์์ค๋ฅผ ์๋ณํฉ๋๋ค. ์ด ๋จ๊ณ๋ COEP๋ฅผ ํ์ฑํํ์ ๋์ ์ํฅ์ ์ดํดํ๋ ๋ฐ ์ค์ํฉ๋๋ค. ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ํฌ๊ด์ ์ธ ๋ชฉ๋ก์ ์ป์ผ์ธ์.
- CORP ํค๋ ์ค์ : ์ ์ดํ๋ ๊ฐ ๋ฆฌ์์ค์ ๋ํด ์ ์ ํ
Cross-Origin-Resource-Policyํค๋๋ฅผ ์ค์ ํฉ๋๋ค. ๋ฆฌ์์ค๊ฐ ์์ ์ ์ถ์ฒ์์๋ง ๋ก๋๋๋๋ก ํ๋ ค๋ฉดsame-origin์ผ๋ก ์ค์ ํฉ๋๋ค. ๋์ผํ ์ฌ์ดํธ์์ ๋ก๋๋๋๋ก ํ๋ ค๋ฉดsame-site๋ก ์ค์ ํฉ๋๋ค. ์ ์ดํ ์ ์๋ ๋ฆฌ์์ค์ ๊ฒฝ์ฐ 4๋จ๊ณ๋ฅผ ์ฐธ์กฐํ์ธ์. - CORS ๊ตฌ์ฑ: ๋ค๋ฅธ ์ถ์ฒ์์ ๋ฆฌ์์ค๋ฅผ ๋ก๋ํด์ผ ํ๊ณ ํด๋น ๋ฆฌ์์ค์ CORP ํค๋๋ฅผ ์ค์ ํ ์ ์๋ ๊ฒฝ์ฐ, CORS๋ฅผ ์ฌ์ฉํ์ฌ ๊ต์ฐจ ์ถ์ฒ ์ ๊ทผ์ ํ์ฉํ ์ ์์ต๋๋ค. ๋ฆฌ์์ค๋ฅผ ํธ์คํ
ํ๋ ์๋ฒ๋ ์๋ต์
Access-Control-Allow-Originํค๋๋ฅผ ํฌํจํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ชจ๋ ์ถ์ฒ์ ์์ฒญ์ ํ์ฉํ๋ ค๋ฉด ํค๋๋ฅผAccess-Control-Allow-Origin: *๋ก ์ค์ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ชจ๋ ์ถ์ฒ์ ์ ๊ทผ์ ํ์ฉํ๋ ๊ฒ์ ๋ณด์์ ์ํฅ์ ์ผ๋์ ๋์ด์ผ ํฉ๋๋ค. ํ์ฉ๋๋ ์ ํํ ์ถ์ฒ๋ฅผ ์ง์ ํ๋ ๊ฒ์ด ์ข ์ข ๋ ์ข์ต๋๋ค. - ์ ์ดํ ์ ์๋ ๋ฆฌ์์ค ์ฒ๋ฆฌ: ์ ์ดํ ์ ์๋ ํ์ฌ ๋๋ฉ์ธ์์ ํธ์คํ
๋๋ ๋ฆฌ์์ค์ ๊ฒฝ์ฐ ๋ช ๊ฐ์ง ์ต์
์ด ์์ต๋๋ค:
- CORS ํค๋ ์์ฒญ: ํ์ฌ ์ ๊ณต์ ์ฒด์ ์ฐ๋ฝํ์ฌ ์๋ต์ ์ ์ ํ CORS ํค๋๋ฅผ ์ถ๊ฐํ๋๋ก ์์ฒญํฉ๋๋ค.
- ๋ฆฌ์์ค ํ๋ก์: ์์ ์ ๋๋ฉ์ธ์ ๋ฆฌ์์ค ์ฌ๋ณธ์ ํธ์คํ ํ๊ณ ์ฌ๋ฐ๋ฅธ CORP ํค๋์ ํจ๊ป ์ ๊ณตํฉ๋๋ค. ์ด๋ ์ธํ๋ผ์ ๋ณต์ก์ฑ์ ๋ํ ์ ์์ผ๋ฉฐ ํ์ฌ์ ์๋น์ค ์ฝ๊ด์ ์๋ฐํ ์ ์์ผ๋ฏ๋ก ํ์ํ ๊ถํ์ด ์๋์ง ํ์ธํ์ธ์.
- ๋์ ์ฐพ๊ธฐ: ์ง์ ํธ์คํ ํ ์ ์๊ฑฐ๋ ์ด๋ฏธ ์ฌ๋ฐ๋ฅธ CORS ํค๋๊ฐ ์๋ ๋์ฒด ๋ฆฌ์์ค๋ฅผ ์ฐพ์ต๋๋ค.
<iframe>์ฌ์ฉ(์ฃผ์): ๋ฆฌ์์ค๋ฅผ<iframe>์ ๋ก๋ํ๊ณpostMessage๋ฅผ ์ฌ์ฉํ์ฌ ํต์ ํฉ๋๋ค. ์ด๋ ์๋นํ ๋ณต์ก์ฑ๊ณผ ์ ์ฌ์ ์ธ ์ฑ๋ฅ ์ค๋ฒํค๋๋ฅผ ์ถ๊ฐํ๋ฉฐ ๋ชจ๋ ์๋๋ฆฌ์ค์ ์ ํฉํ์ง ์์ ์ ์์ต๋๋ค.
- COEP ํค๋ ์ค์ : ๋ชจ๋ ๊ต์ฐจ ์ถ์ฒ ๋ฆฌ์์ค๋ฅผ ์ฒ๋ฆฌํ ํ
Cross-Origin-Embedder-Policyํค๋๋ฅผrequire-corp๋ก ์ค์ ํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ชจ๋ ๊ต์ฐจ ์ถ์ฒ ๋ฆฌ์์ค๊ฐ CORP ๋๋ CORS ํค๋์ ํจ๊ป ๋ก๋๋๋๋ก ๊ฐ์ ํฉ๋๋ค. - COOP ํค๋ ์ค์ :
Cross-Origin-Opener-Policyํค๋๋ฅผsame-origin๋๋same-origin-allow-popups์ผ๋ก ์ค์ ํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ธ๋ผ์ฐ์ง ์ปจํ ์คํธ๊ฐ ๋ค๋ฅธ ์ถ์ฒ๋ก๋ถํฐ ๊ฒฉ๋ฆฌ๋ฉ๋๋ค. - ์ฒ ์ ํ ํ ์คํธ: ์ถ์ฒ ๊ฒฉ๋ฆฌ๋ฅผ ํ์ฑํํ ํ ์น์ฌ์ดํธ๋ฅผ ์ฒ ์ ํ ํ ์คํธํ์ฌ ๋ชจ๋ ๋ฆฌ์์ค๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ๋ก๋๋๊ณ ์๊ธฐ์น ์์ ์ค๋ฅ๊ฐ ์๋์ง ํ์ธํฉ๋๋ค. ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ์๋ณํ๊ณ ํด๊ฒฐํฉ๋๋ค.
- ๋ชจ๋ํฐ๋ง ๋ฐ ๋ฐ๋ณต: ์ถ์ฒ ๊ฒฉ๋ฆฌ์ ๊ด๋ จ๋ ๋ฌธ์ ์ ๋ํด ์น์ฌ์ดํธ๋ฅผ ์ง์์ ์ผ๋ก ๋ชจ๋ํฐ๋งํฉ๋๋ค. ํ์์ ๋ฐ๋ผ ๊ตฌ์ฑ์ ์กฐ์ ํ ์ค๋น๋ฅผ ํ์ธ์.
์ค์ฉ์ ์ธ ์์ ๋ฐ ์ฝ๋ ์ค๋ํซ
์์ 1: Express๋ฅผ ์ฌ์ฉํ Node.js์์ ํค๋ ์ค์
const express = require('express');
const app = express();
app.use((req, res, next) => {
res.setHeader('Cross-Origin-Opener-Policy', 'same-origin');
res.setHeader('Cross-Origin-Embedder-Policy', 'require-corp');
res.setHeader('Cross-Origin-Resource-Policy', 'same-origin');
next();
});
app.get('/', (req, res) => {
res.send('Hello, Origin Isolated World!');
});
app.listen(3000, () => {
console.log('Server listening on port 3000');
});
์์ 2: Apache์์ ํค๋ ์ค์
Apache ๊ตฌ์ฑ ํ์ผ(์: .htaccess ๋๋ httpd.conf)์์:
Header set Cross-Origin-Opener-Policy "same-origin"
Header set Cross-Origin-Embedder-Policy "require-corp"
Header set Cross-Origin-Resource-Policy "same-origin"
์์ 3: Nginx์์ ํค๋ ์ค์
Nginx ๊ตฌ์ฑ ํ์ผ(์: nginx.conf)์์:
add_header Cross-Origin-Opener-Policy "same-origin";
add_header Cross-Origin-Embedder-Policy "require-corp";
add_header Cross-Origin-Resource-Policy "same-origin";
์ผ๋ฐ์ ์ธ ๋ฌธ์ ํด๊ฒฐ
์ถ์ฒ ๊ฒฉ๋ฆฌ๋ฅผ ๊ตฌํํ๋ฉด ๋๋๋ก ์๊ธฐ์น ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ๋ค์์ ๋ช ๊ฐ์ง ์ผ๋ฐ์ ์ธ ๋ฌธ์ ์ ํด๊ฒฐ์ฑ ์ ๋๋ค:
- ๋ฆฌ์์ค ๋ก๋ ์คํจ: ์ด๋ ์ผ๋ฐ์ ์ผ๋ก ์๋ชป๋ CORP ๋๋ CORS ๊ตฌ์ฑ ๋๋ฌธ์ ๋๋ค. ๋ชจ๋ ๊ต์ฐจ ์ถ์ฒ ๋ฆฌ์์ค์ ์ฌ๋ฐ๋ฅธ ํค๋๊ฐ ์๋์ง ๋ค์ ํ์ธํ์ธ์. ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์คํจํ๋ ๋ฆฌ์์ค์ ํน์ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ์๋ณํฉ๋๋ค.
- ์น์ฌ์ดํธ ๊ธฐ๋ฅ ์์: ํน์ ์น์ฌ์ดํธ ๊ธฐ๋ฅ์ ๊ต์ฐจ ์ถ์ฒ ์ ๊ทผ์ ์์กดํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๊ธฐ๋ฅ์ ์๋ณํ๊ณ ๊ทธ์ ๋ฐ๋ผ ๊ตฌ์ฑ์ ์กฐ์ ํ์ธ์. ์ ํ๋ ๊ต์ฐจ ์ถ์ฒ ํต์ ์ ์ํด
postMessage์ ํจ๊ป<iframe>์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ณ ๋ คํ๋, ์ฑ๋ฅ์ ๋ฏธ์น๋ ์ํฅ์ ์ธ์งํด์ผ ํฉ๋๋ค. - ํ์
์ด ์๋ํ์ง ์์: ์น์ฌ์ดํธ์์ ํ์
์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ํ์
์ด ์คํ๋ ์ฐฝ์ ๋ํ ์ ๊ทผ์ ์ ์งํ๋๋ก ํ์ฉํ๋ ค๋ฉด
COOP: same-origin-allow-popups๋ฅผ ์ฌ์ฉํด์ผ ํ ์ ์์ต๋๋ค. - ํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋ํ์ง ์์: ์ผ๋ถ ํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ถ์ฒ ๊ฒฉ๋ฆฌ์ ํธํ๋์ง ์์ ์ ์์ต๋๋ค. ๋์ฒด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐพ๊ฑฐ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฐ๋ฐ์์๊ฒ ์ฐ๋ฝํ์ฌ CORP ๋ฐ CORS ์ง์์ ์์ฒญํ์ธ์.
์ถ์ฒ ๊ฒฉ๋ฆฌ์ ์ด์
์ถ์ฒ ๊ฒฉ๋ฆฌ ๊ตฌํ์ ์ด์ ์ ์๋นํฉ๋๋ค:
- ํฅ์๋ ๋ณด์: ์คํํฐ ๋ฐ ๋ฉํธ๋ค์ด ์คํ์ผ์ ๊ณต๊ฒฉ๋ฟ๋ง ์๋๋ผ ๋ค๋ฅธ ๊ต์ฐจ ์ฌ์ดํธ ์ทจ์ฝ์ ์ ์ํํฉ๋๋ค.
- ๊ฐ์ ๋ ๋ฐ์ดํฐ ๋ณดํธ: ๋ฏผ๊ฐํ ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ๋ฌด๋จ ์ ๊ทผ์ผ๋ก๋ถํฐ ๋ณดํธํฉ๋๋ค.
- ์ ๋ขฐ๋ ์ฆ๊ฐ: ๋ณด์์ ๋ํ ๋ ธ๋ ฅ์ ๋ณด์ฌ์ค์ผ๋ก์จ ์ฌ์ฉ์์ ํํธ๋์ ์ ๋ขฐ๋ฅผ ๊ตฌ์ถํฉ๋๋ค.
- ๊ท์ ์ค์: ๋ฐ์ดํฐ ํ๋ผ์ด๋ฒ์ ๋ฐ ๋ณด์๊ณผ ๊ด๋ จ๋ ๊ท์ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
์ฑ๋ฅ์ ๋ฏธ์น๋ ์ํฅ
์ถ์ฒ ๊ฒฉ๋ฆฌ๋ ์๋นํ ๋ณด์ ์ด์ ์ ์ ๊ณตํ์ง๋ง ์น์ฌ์ดํธ ์ฑ๋ฅ์๋ ์ํฅ์ ์ค ์ ์์ต๋๋ค. ๊ฒฉ๋ฆฌ๊ฐ ๊ฐํ๋๋ฉด ๋ฉ๋ชจ๋ฆฌ ์๋น์ CPU ์ฌ์ฉ๋์ด ์ฆ๊ฐํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ฑ๋ฅ์ ๋ฏธ์น๋ ์ํฅ์ ์ผ๋ฐ์ ์ผ๋ก ๋ฏธ๋ฏธํ๋ฉฐ ์ข ์ข ๋ณด์ ์ด์ ์ด ์ด๋ฅผ ์์ํฉ๋๋ค. ๋์ฑ์ด, ํ๋ ๋ธ๋ผ์ฐ์ ๋ ์ถ์ฒ ๊ฒฉ๋ฆฌ์ ์ค๋ฒํค๋๋ฅผ ์ต์ํํ๊ธฐ ์ํด ์ง์์ ์ผ๋ก ์ต์ ํ๋๊ณ ์์ต๋๋ค.
์ฑ๋ฅ ์ํฅ์ ์ต์ํํ๊ธฐ ์ํ ๋ช ๊ฐ์ง ์ ๋ต์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ๋ฆฌ์์ค ๋ก๋ฉ ์ต์ ํ: ์ฝ๋ ๋ถํ , ์ง์ฐ ๋ก๋ฉ, ์บ์ฑ๊ณผ ๊ฐ์ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ์น์ฌ์ดํธ๊ฐ ๋ฆฌ์์ค๋ฅผ ํจ์จ์ ์ผ๋ก ๋ก๋ํ๋์ง ํ์ธํฉ๋๋ค.
- CDN ์ฌ์ฉ: ์ฝํ ์ธ ์ ์ก ๋คํธ์ํฌ(CDN)๋ฅผ ์ฌ์ฉํ์ฌ ๋ฆฌ์์ค๋ฅผ ์ง๋ฆฌ์ ์ผ๋ก ๋ถ์ฐ์์ผ ๋๊ธฐ ์๊ฐ์ ์ค์ด๊ณ ๋ก๋ฉ ์๊ฐ์ ๊ฐ์ ํฉ๋๋ค.
- ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง: ์น์ฌ์ดํธ์ ์ฑ๋ฅ์ ์ง์์ ์ผ๋ก ๋ชจ๋ํฐ๋งํ๊ณ ์ถ์ฒ ๊ฒฉ๋ฆฌ์ ๊ด๋ จ๋ ๋ณ๋ชฉ ํ์์ ์๋ณํฉ๋๋ค.
์ถ์ฒ ๊ฒฉ๋ฆฌ์ ์น ๋ณด์์ ๋ฏธ๋
์ถ์ฒ ๊ฒฉ๋ฆฌ๋ ์น ๋ณด์์์ ์ค์ํ ์ง์ ์ ๋ํ๋ ๋๋ค. ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ ์ ๋ ๋ณต์กํด์ง๊ณ ๋ฐ์ดํฐ ์ค์ฌ์ ์ผ๋ก ๋ณํจ์ ๋ฐ๋ผ ๊ฐ๋ ฅํ ๋ณด์ ์กฐ์น์ ํ์์ฑ์ ๊ณ์ํด์ ์ปค์ง ๊ฒ์ ๋๋ค. ์ถ์ฒ ๊ฒฉ๋ฆฌ๋ ๋ ์์ ํ๊ณ ์ ๋ขฐํ ์ ์๋ ์น ๊ฒฝํ์ ๊ตฌ์ถํ๊ธฐ ์ํ ๊ฒฌ๊ณ ํ ๊ธฐ๋ฐ์ ์ ๊ณตํฉ๋๋ค. ๋ธ๋ผ์ฐ์ ๊ณต๊ธ์ ์ฒด๊ฐ ์ถ์ฒ ๊ฒฉ๋ฆฌ๋ฅผ ๊ณ์ ๊ฐ์ ํ๊ณ ๋ค๋ฌ์ด๊ฐ์ ๋ฐ๋ผ, ์ด๋ ๋ชจ๋ ์น ๊ฐ๋ฐ์์๊ฒ ํ์ค ๊ดํ์ด ๋ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
๊ธ๋ก๋ฒ ๊ณ ๋ ค ์ฌํญ
์ ์ธ๊ณ ์ฌ์ฉ์๋ฅผ ๋์์ผ๋ก ์ถ์ฒ ๊ฒฉ๋ฆฌ๋ฅผ ๊ตฌํํ ๋๋ ๋ค์ ์ฌํญ์ ๊ณ ๋ คํ์ธ์:
- ์ฝํ ์ธ ์ ์ก ๋คํธ์ํฌ(CDN): ์ ์ธ๊ณ์ PoP(points of presence)๋ฅผ ๊ฐ์ถ CDN์ ํ์ฉํ์ฌ ์ฌ์ฉ์์ ์์น์ ๊ด๊ณ์์ด ๋ฆฌ์์ค์ ๋ํ ๋ฎ์ ๋๊ธฐ ์๊ฐ ์ ๊ทผ์ ๋ณด์ฅํฉ๋๋ค. CDN์ ๋ํ COOP, COEP, CORP๋ฅผ ํฌํจํ ์ฌ๋ฐ๋ฅธ HTTP ํค๋๋ฅผ ์ค์ ํ๋ ๊ณผ์ ์ ๋จ์ํํฉ๋๋ค.
- ๋ค๊ตญ์ด ๋๋ฉ์ธ ์ด๋ฆ(IDN): ์น์ฌ์ดํธ์ ๋ฆฌ์์ค๊ฐ IDN์ ์ฌ์ฉํ์ฌ ์ ๊ทผ ๊ฐ๋ฅํ์ง ํ์ธํฉ๋๋ค. ํผ์ฑ ๊ณต๊ฒฉ์ ํผํ๊ณ ๋ค๋ฅธ ์ธ์ด ํ๊ฒฝ ์ค์ ์ฌ์ฉ์์ ์ผ๊ด๋ ์ ๊ทผ์ ๋ณด์ฅํ๊ธฐ ์ํด ๋๋ฉ์ธ ๋ฑ๋ก ๋ฐ DNS ๊ตฌ์ฑ์ ์ ์คํ๊ฒ ๊ด๋ฆฌํ์ธ์.
- ๋ฒ๋ฅ ๋ฐ ๊ท์ ์ค์: ์ฌ๋ฌ ๊ตญ๊ฐ ๋ฐ ์ง์ญ์ ๋ฐ์ดํฐ ํ๋ผ์ด๋ฒ์ ๋ฐ ๋ณด์ ๊ท์ ์ ์ธ์งํ์ธ์. ์ถ์ฒ ๊ฒฉ๋ฆฌ๋ ์ ๋ฝ ์ฐํฉ์ GDPR(์ผ๋ฐ ๋ฐ์ดํฐ ๋ณดํธ ๊ท์ ) ๋ฐ ๋ฏธ๊ตญ์ CCPA(์บ๋ฆฌํฌ๋์ ์๋น์ ๊ฐ์ธ์ ๋ณด ๋ณดํธ๋ฒ)์ ๊ฐ์ ๊ท์ ์ ์ค์ํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
- ์ ๊ทผ์ฑ: ์ถ์ฒ ๊ฒฉ๋ฆฌ๋ฅผ ๊ตฌํํ ํ์๋ ์น์ฌ์ดํธ๊ฐ ์ฅ์ ๊ฐ ์๋ ์ฌ์ฉ์์๊ฒ ๊ณ์ ์ ๊ทผ ๊ฐ๋ฅํ์ง ํ์ธํฉ๋๋ค. ๋ณด์กฐ ๊ธฐ์ ๋ก ์น์ฌ์ดํธ๋ฅผ ํ ์คํธํ๊ณ WCAG(์น ์ฝํ ์ธ ์ ๊ทผ์ฑ ๊ฐ์ด๋๋ผ์ธ)์ ๊ฐ์ ์ ๊ทผ์ฑ ์ง์นจ์ ๋ฐ๋ฅด์ธ์.
- ํ์ฌ ์๋น์ค: ์น์ฌ์ดํธ์ ํตํฉํ๋ ํ์ฌ ์๋น์ค์ ๋ณด์ ๋ฐ ๊ฐ์ธ์ ๋ณด ๋ณดํธ ๊ดํ์ ์ ์คํ๊ฒ ํ๊ฐํฉ๋๋ค. ์ด๋ฌํ ์๋น์ค๊ฐ ์ถ์ฒ ๊ฒฉ๋ฆฌ๋ฅผ ์ง์ํ๊ณ ๊ด๋ จ ๊ท์ ์ ์ค์ํ๋์ง ํ์ธํ์ธ์.
๊ฒฐ๋ก
ํ๋ก ํธ์๋ ์ถ์ฒ ๊ฒฉ๋ฆฌ ์ ์ฑ ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด์์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์๋ ๊ฐ๋ ฅํ ๋ณด์ ๋ฉ์ปค๋์ฆ์ ๋๋ค. ๊ธฐ๋ณธ ์์น์ ์ดํดํ๊ณ , ์ฌ๋ฐ๋ฅธ ํค๋๋ฅผ ๊ตฌํํ๋ฉฐ, ์ ์ฌ์ ์ธ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํจ์ผ๋ก์จ ๊ฐ๋ฐ์๋ ์ ์ธ๊ณ ์ฌ์ฉ์์๊ฒ ๋ ์์ ํ๊ณ ์ ๋ขฐํ ์ ์๋ ์น ๊ฒฝํ์ ์ ๊ณตํ ์ ์์ต๋๋ค. ๊ตฌํ์๋ ์ ์คํ ๊ณํ๊ณผ ํ ์คํธ๊ฐ ํ์ํ์ง๋ง, ์ถ์ฒ ๊ฒฉ๋ฆฌ์ ์ด์ ์ ๊ทธ ์ด๋ ค์์ ํจ์ฌ ๋ฐ์ด๋์ต๋๋ค. ์ถ์ฒ ๊ฒฉ๋ฆฌ๋ฅผ ์น ๋ณด์ ์ ๋ต์ ํต์ฌ ๊ตฌ์ฑ ์์๋ก ๋ฐ์๋ค์ด๊ณ ์งํํ๋ ์ํ ํ๊ฒฝ์ผ๋ก๋ถํฐ ์ฌ์ฉ์์ ๋ฐ์ดํฐ๋ฅผ ๋ณดํธํ์ธ์.